package vaccine.appointment.system.common.config;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import vaccine.appointment.system.common.enums.DelFlgEnum;
import vaccine.appointment.system.common.utils.EncryptionAndDecryptionUtil;
import vaccine.appointment.system.user.dataobject.User;
import vaccine.appointment.system.user.enums.IdentityInfoEnum;
import vaccine.appointment.system.user.mapper.UserMapper;

/**
 * 初始化数据配置
 * 应用启动时自动创建默认超级管理员账号
 */
@Slf4j
@Component
public class InitialDataConfig implements CommandLineRunner {

    @Autowired
    private UserMapper userMapper;

    /**
     * 默认超级管理员账号信息
     */
    private static final String DEFAULT_SUPER_ADMIN_ACCOUNT = "superadmin";
    private static final String DEFAULT_SUPER_ADMIN_PASSWORD = "123456";
    private static final String DEFAULT_SUPER_ADMIN_EMAIL = "admin@vaccine-system.com";

    @Override
    public void run(String... args) {
        initSuperAdmin();
    }

    /**
     * 初始化超级管理员账号
     */
    private void initSuperAdmin() {
        try {
            // 检查是否已存在超级管理员
            QueryWrapper<User> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("account", DEFAULT_SUPER_ADMIN_ACCOUNT);
            queryWrapper.eq("del_flg", DelFlgEnum.NOT_DELETED.getCode());
            User existingUser = userMapper.selectOne(queryWrapper);

            if (existingUser != null) {
                log.info("超级管理员账号已存在，跳过初始化: {}", DEFAULT_SUPER_ADMIN_ACCOUNT);
                return;
            }

            // 检查是否已存在其他超级管理员
            QueryWrapper<User> superAdminQueryWrapper = new QueryWrapper<>();
            superAdminQueryWrapper.eq("identity_info", IdentityInfoEnum.SUPER_ADMIN.getCode());
            superAdminQueryWrapper.eq("del_flg", DelFlgEnum.NOT_DELETED.getCode());
            long superAdminCount = userMapper.selectCount(superAdminQueryWrapper);

            if (superAdminCount > 0) {
                log.info("系统中已存在其他超级管理员，跳过创建默认超级管理员");
                return;
            }

            // 创建默认超级管理员
            User superAdmin = new User();
            superAdmin.setAccount(DEFAULT_SUPER_ADMIN_ACCOUNT);
            
            // 加密密码
            String encryptedPassword = EncryptionAndDecryptionUtil.encryptByDigester(DEFAULT_SUPER_ADMIN_PASSWORD);
            superAdmin.setPassword(encryptedPassword);
            
            superAdmin.setEmail(DEFAULT_SUPER_ADMIN_EMAIL);
            superAdmin.setIdentityInfo(IdentityInfoEnum.SUPER_ADMIN.getCode());
            superAdmin.setPersonId(null); // 超级管理员不需要关联 Person
            superAdmin.setVaccinationSiteId(null); // 超级管理员不属于任何接种点
            superAdmin.setDelFlg(DelFlgEnum.NOT_DELETED.getCode());

            int result = userMapper.insert(superAdmin);
            
            if (result > 0) {
                log.info("✅ 默认超级管理员创建成功！");
                log.info("   账号: {}", DEFAULT_SUPER_ADMIN_ACCOUNT);
                log.info("   密码: {}", DEFAULT_SUPER_ADMIN_PASSWORD);
                log.info("   邮箱: {}", DEFAULT_SUPER_ADMIN_EMAIL);
                log.warn("⚠️  请首次登录后及时修改密码！");
            } else {
                log.error("❌ 创建默认超级管理员失败");
            }
        } catch (Exception e) {
            log.error("初始化超级管理员时发生错误: {}", e.getMessage(), e);
        }
    }
}

